package top.liuzhenyu.study.javawebjdbc.dao;

import top.liuzhenyu.study.javawebjdbc.entity.TbClass;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TbClassDAO {
    // jdbc：java数据库连接
    // dao：数据访问对象
    // entity：实体类，一般就是描述数据的类
    // java.sql.Connection类就是数据库的连接类


    // 仿照上课的班级管理完成新闻的管理功能
    // 开发次序：1.实体类，2.对应的dao，添加、查询、删除，3.完成测试，4：完成jsp页面
    // 思考题：
    // 仿造新闻管理，完成公告管理的功能
    // 公告的信息包括主键，公告的表土，公告的内容，公告的发布人姓名，公告的发布时间
    // 添加难点，就是多一个是否置顶的字段，类型是int，0表示不置顶，1表示置顶

    public static int insert(TbClass tbClass) throws SQLException {
        // 连接数据库
        Connection conn = DBHelper.getConnection();
        // 预备添加的语句,一个?表示一个参数
        String sql = "insert into tb_class(classname, classinfo) values(?,?)";
        // java的预处理sql语句
        PreparedStatement ps = conn.prepareStatement(sql);
        // 设置?参数对应的值
        ps.setString(1,tbClass.getClassname());
        ps.setString(2,tbClass.getClassinfo());
        // 执行语句并获取语句影响的行数
        int i = ps.executeUpdate();
        // 关闭数据库连接
        conn.close();
        return i;
    }

    public static List<TbClass> query() throws SQLException {
        List<TbClass> list = new ArrayList<>();
        // 数据库链接
        Connection conn = DBHelper.getConnection();
        // 查询语句
        String sql = "select * from tb_class";
        // 预处理sql语句
        PreparedStatement ps = conn.prepareStatement(sql);
        // 执行查询并且返回结果集
        ResultSet rs = ps.executeQuery();
        // 查询结果集的next是读取下一行数据，如果读取到就返回真，否则就是假
        while (rs.next()) {
            // 将数据库的记录转换成java对象
            TbClass tbClass = new TbClass();
            // rs.get数据类型("数据表中字段名称")就是获取查询结果中指定字段的数据
            tbClass.setId(rs.getInt("id"));
            tbClass.setClassname(rs.getString("classname"));
            tbClass.setClassinfo(rs.getString("classinfo"));
            // java的Date类型对应的是数据库api的Timestamp类型
            tbClass.setCreated(rs.getTimestamp("created"));
            // 添加到集合
            list.add(tbClass);
        }

        conn.close();
        return list;
    }

    public  static int delete(Integer id) throws SQLException {
        Connection conn = DBHelper.getConnection();
        String sql = "delete from tb_class where id = ?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        int i = ps.executeUpdate();
        conn.close();
        return i;
    }

}
